در طول فصل اول با دستورات پایه لینوکس آشنا شدید. یکی از دستورات مفید در پوسته Bash
دستور compgen است که برای تکمیل خودکار (Auto-completion)
در خط فرمان استفاده میشود. اما در پوسته Zsh که شما از آن استفاده میکنید،
این دستور به صورت پیشفرض وجود ندارد.
در Zsh، دستور compgen یک دستور داخلی Bash است و به همین دلیل
با خطای command not found مواجه میشوید.
توضیح: همانطور که در تصویر میبینید، Zsh این دستور را نمیشناسد.
compgen یک دستور built-in در پوسته Bash است.compgen سازگار نیست.compgen به طور پیشفرض در دسترس نیست.
Zsh ابزارهای مخصوص خود را برای تکمیل خودکار دارد. در اینجا معادلهای compgen در Zsh آورده شده است:
| دستور Bash | معادل در Zsh | توضیح |
|---|---|---|
compgen -a |
type -m '*' |
لیست همه دستورات قابل اجرا |
compgen -d |
printf '%s\n' $path |
لیست دایرکتوریهای PATH |
compgen -c |
print -rlo -- $commands:t |
لیست همه دستورات خارجی (external) |
compgen -b |
print -rlo -- $builtins |
لیست دستورات داخلی (built-in) |
compgen -A function |
print -rlo -- $functions |
لیست توابع تعریفشده |
compgen -A variable |
print -rlo -- ${(k)parameters} |
لیست متغیرهای تعریفشده |
نمایش همه دستورات قابل اجرا (معادل compgen -a).
نمایش دایرکتوریهای PATH (معادل compgen -d).
نمایش ۱۰ دستور داخلی اول Zsh (معادل compgen -b).
اگر به compgen نیاز دارید، میتوانید با اجرای دستور زیر، یک لایه سازگاری در Zsh فعال کنید:
توضیح: این دستور، قابلیت تکمیل خودکار (Tab Completion) مخصوص Bash را در Zsh فعال میکند.
پس از اجرای bashcompinit، میتوانید از compgen استفاده کنید.
اما به یاد داشته باشید که این کار فقط برای جلسه فعلی Zsh معتبر است.
برای دائمی کردن آن، bashcompinit را به فایل ~/.zshrc اضافه کنید.
حتی اگر compgen را در Zsh فعال کنید، خروجی آن ممکن است با Bash متفاوت باشد
زیرا سیستم تکمیل خودکار Zsh پیچیدهتر است.
compgen نیاز دارید، از bashcompinit استفاده کنید.zsh-completions).| چالش | راهحل |
|---|---|
دستور compgen پیدا نمیشود |
از معادلهای Zsh مانند type -m '*' و printf '%s\n' $path استفاده کنید |
نیاز به compgen برای اسکریپت |
دستور bashcompinit را اجرا کنید یا به ~/.zshrc اضافه کنید |
| تفاوت خروجی با Bash | از روشهای بومی Zsh استفاده کنید که با محیط شما سازگارتر است |
type -m '*' | head -20 اولین ۲۰ دستور قابل اجرا را مشاهده کنید.printf '%s\n' $path دایرکتوریهای PATH را لیست کنید.compgen نیاز دارد، bashcompinit را در ~/.zshrc قرار دهید.